@echo off
:: 处理中文字符 
chcp 65001 > nul
:: 设置窗口标题
title Windows Update 管理工具
:: 设置窗口宽高
mode con: cols=100 lines=35
:: 检查管理员权限
net session >nul 2>&1
if %errorLevel% neq 0 (
    echo.
    echo    错误：请以管理员身份运行此脚本！
    echo.
    pause
    exit /b
)

:menu
cls
echo =============================================== 
echo      Windows 神奇妙妙工具箱
echo =============================================== 
echo.
echo     1. 暂停Window自动更新 
echo     2. 恢复Window自动更新 
echo     3. 检查Window自动更新相关服务的当前状态 
echo     4. C盘垃圾清理 
echo     5. IDEA试用期清理 
echo     6. 清理Maven损坏的jar文件
echo     7. C盘大文件扫描
echo     99. 关闭当前窗口
echo.
set /p choice=     请选择操作 (1/2/3/4/5/6/7/99)：

if "%choice%"=="1" goto disableUpdate
if "%choice%"=="2" goto enableUpdate
if "%choice%"=="3" goto checkStatus
if "%choice%"=="4" goto cleanDisk
if "%choice%"=="5" goto cleanIdeaTrial
if "%choice%"=="6" goto cleanMaven
if "%choice%"=="7" goto scanLargeFiles
if "%choice%"=="99" goto exitScript
echo 选择无效，请按任意键重新选择...
pause >nul
goto menu

:disableUpdate
echo.
echo  正在尝试暂停Windows更新...
sc stop wuauserv >nul 2>&1
sc config wuauserv start= disabled >nul
sc stop UsoSvc >nul 2>&1
sc config UsoSvc start= disabled >nul
sc stop bits >nul 2>&1
sc config bits start= disabled >nul
echo  操作完成！Windows更新服务已停止并禁用。
echo.
pause
goto menu

:enableUpdate
echo.
echo  正在尝试恢复Windows更新...
sc config wuauserv start= demand >nul
sc config UsoSvc start= demand >nul
sc config bits start= demand >nul
echo  操作完成！Windows更新服务已设置为手动启动。
echo  请注意：服务状态仍为"已停止"，系统会在需要时自动启动它们。
echo.
pause
goto menu

:checkStatus
echo.
echo  检查Windows更新相关服务状态：
echo  ----------------------------------------
for %%s in (wuauserv UsoSvc bits) do (
    echo 服务: %%s
    sc query %%s | findstr "STATE" || echo 服务未找到或无法查询
    echo.
)
echo.
echo  检查启动类型：
echo  ----------------------------------------
for %%s in (wuauserv UsoSvc bits) do (
    echo 服务: %%s
    sc qc %%s | findstr "START_TYPE" || echo 服务未找到或无法查询
    echo.
)
echo.
pause
goto menu

:cleanDisk
cls
echo ================================================
echo      C盘垃圾清理工具
echo ================================================
echo.
echo  警告：此操作将删除临时文件和缓存
echo  建议先关闭所有正在运行的程序
echo.
set /p confirm=  是否继续？(y/n):
if /i not "%confirm%"=="y" (
    echo  操作已取消
    echo.
    pause
    goto menu
)

echo.
echo  正在清除系统垃圾文件，请稍等...
echo.

:: 清理系统临时文件
echo  1、开始清除系统临时文件，请稍等...

del /f /s /q %systemdrive%\*.tmp
del /f /s /q %systemdrive%\*._mp
del /f /s /q %systemdrive%\*.gid
del /f /s /q %systemdrive%\*.chk
del /f /s /q %systemdrive%\*.old
del /f /s /q %windir%\*.bak
del /f /s /q %windir%\temp\*.*
del /f /a /q %systemdrive%\*.sqm

:: 清理Windows更新缓存
echo.
echo  2、开始清理Windows更新缓存，请稍等...

del /f /s /q %windir%\SoftwareDistribution\Download\*.*

:: 清理用户临时文件
echo.
echo  3、开始清理用户临时文件，请稍等...

del /f /s /q "%userprofile%\cookies\*.*"
del /f /s /q "%userprofile%\recent\*.*"
del /f /s /q "%userprofile%\local settings\temporary internet files\*.*"
del /f /s /q "%userprofile%\local settings\temp\*.*"

echo.
echo  ===============================================
echo  清除系统垃圾文件完成！
echo  建议重启电脑以获得最佳效果
echo  ===============================================
echo.
pause
goto menu

:cleanIdeaTrial
cls
echo ===============================================
echo     IDEA试用期清理工具
echo ===============================================
echo.
echo  警告：此操作将删除JetBrains相关注册表和文件用于重置IDEA等JetBrains产品的试用期
echo  操作执行前，请确保相关的IDEA等jetBrains等产品已经关闭
echo.
set /p confirm=  是否继续？(y/n):
if /i not "%confirm%"=="y" (
    echo  操作已取消
    echo.
    pause
    goto menu
)

echo.
echo  正在清理IDEA试用期信息...
echo.

:: 清理注册表项
echo  正在删除注册表项...
reg delete "HKEY_CURRENT_USER\Software\JavaSoft" /f 2>nul
if errorlevel 1 (
    echo  注册表项删除失败或不存在
) else (
    echo  注册表项删除成功
)

:: 清理JetBrains相关文件
echo  正在删除JetBrains相关文件...
set "jetbrainsPath=%USERPROFILE%\AppData\Roaming\JetBrains"

if exist "%jetbrainsPath%\PermanentDeviceId" (
    del /f /q "%jetbrainsPath%\PermanentDeviceId" 2>nul
    echo  PermanentDeviceId 删除成功
) else (
    echo  PermanentDeviceId 文件不存在
)

if exist "%jetbrainsPath%\PermanentUserId" (
    del /f /q "%jetbrainsPath%\PermanentUserId" 2>nul
    echo  PermanentUserId 删除成功
) else (
    echo  PermanentUserId 文件不存在
)

:: 额外清理一些常见的JetBrains试用文件
echo  正在清理其他试用信息...
for /d %%d in ("%jetbrainsPath%\*") do (
    if exist "%%d\eval" (
        rmdir /s /q "%%d\eval" 2>nul
        echo  删除 %%d 的eval目录
    )
    if exist "%%d\options\other.xml" (
        del /f /q "%%d\options\other.xml" 2>nul
        echo  删除 %%d 的other.xml文件
    )
)

echo.
echo  ===============================================
echo  IDEA试用期清理完成！
echo  请重新启动IDEA等JetBrains产品
echo  ===============================================
echo.
pause
goto menu

:cleanMaven
cls
echo ===============================================
echo     Maven仓库清理工具
echo ===============================================
echo.
echo  警告：此操作将删除Maven仓库中损坏的jar文件
echo  包括所有包含"lastUpdated"和"unknown"的文件和目录
echo.
set /p confirm=  是否继续？(y/n):
if /i not "%confirm%"=="y" (
    echo  操作已取消
    echo.
    pause
    goto menu
)

echo.
echo  请输入您的Maven本地仓库路径
echo  例如：F:\maven\repository 或 C:\Users\用户名\.m2\repository
set /p REPOSITORY_PATH=  请输入路径：
if "%REPOSITORY_PATH%"=="" (
    echo  路径不能为空！
    echo.
    pause
    goto cleanMaven
)

if not exist "%REPOSITORY_PATH%" (
    echo  指定的路径不存在，请检查后重试！
    echo.
    pause
    goto cleanMaven
)

echo.
echo  正在搜索并清理损坏的Maven文件...
echo.

:: 清理包含lastUpdated的文件
echo  正在清理lastUpdated文件...
for /f "delims=" %%i in ('dir /b /s "%REPOSITORY_PATH%\*lastUpdated*" 2^>nul') do (
    echo  删除: %%i
    del /f /q "%%i" 2>nul
)

:: 清理包含unknown的目录
echo  正在清理unknown目录...
for /f "delims=" %%i in ('dir /b /s "%REPOSITORY_PATH%\*unknown*" 2^>nul') do (
    echo  删除: %%i
    rmdir /s /q "%%i" 2>nul
)

echo.
echo  ===============================================
echo  Maven仓库清理完成！
echo  已删除所有损坏的jar文件和目录
echo  ===============================================
echo.
pause
goto menu

:scanLargeFiles
cls
echo ===============================================
echo                    文件扫描工具
echo ===============================================
echo.
echo  功能：扫描C盘指定数量的最大文件
echo  注意：扫描可能需要较长时间，请耐心等待
echo.
set /p fileCount=  请输入要显示的文件数量（例如：10、20、50等）：
if "%fileCount%"=="" (
    echo  输入不能为空！
    echo.
    pause
    goto scanLargeFiles
)

:: 最简单的数字验证方法
set "isValid="
for /f "delims=0123456789" %%i in ("%fileCount%") do set "isValid=invalid"
if defined isValid (
    echo  请输入有效的数字！
    echo.
    pause
    goto scanLargeFiles
)

:: 检查数字是否大于0
if %fileCount% leq 0 (
    echo  请输入大于0的数字！
    echo.
    pause
    goto scanLargeFiles
)

cls
echo ===============================================
echo     正在扫描C盘前 %fileCount% 个大文件
echo ===============================================
echo.

echo [1/4] 初始化扫描环境...
powershell -Command "Write-Host '✓ 环境准备完成' -ForegroundColor Green"
timeout /t 1 >nul

echo [2/4] 正在扫描文件...
powershell -Command "Write-Host '正在遍历C:\Users目录...' -ForegroundColor Yellow"
timeout /t 2 >nul

echo [3/4] 排序文件大小...
powershell -Command "Write-Host '按文件大小排序中...' -ForegroundColor Cyan"
timeout /t 1 >nul

echo [4/4] 生成报告...
echo.
powershell -Command "$count = %fileCount%; $files = Get-ChildItem C:\Users -File -Recurse -ErrorAction SilentlyContinue | Sort-Object Length -Descending | Select-Object -First $count; if ($files.Count -eq 0) { Write-Host '未找到任何文件！' -ForegroundColor Red; exit; }; Write-Host ('TOP ' + $count + ' 大文件排行:') -ForegroundColor Magenta; Write-Host ''; $results = $files | ForEach-Object { [PSCustomObject]@{ '文件名' = $_.Name; '文件大小(MB)' = [math]::Round($_.Length/1MB, 2); '完整文件名' = $_.FullName } }; $results | Format-Table -AutoSize; Write-Host ''; Write-Host '扫描完成！共找到 ' -NoNewline; Write-Host $files.Count -ForegroundColor Green -NoNewline; Write-Host ' 个文件'"

echo.
echo ══════════════════════════════════════
echo.
choice /c 12 /n /m "请选择: [1]重新扫描 [2]返回主菜单"
if errorlevel 2 goto menu
if errorlevel 1 goto scanLargeFiles

:exitScript
exit